from django.db import models

# Create your models here.

# 地区
Region = [
    (1,'中国大陆'),
    (2,'中国香港'),
    (3,'中国台湾'),
    (4,'美国'),
    (5,'韩国'),
    (6,'日本'),
    (7,'其他')
]
# 清晰度
Quality = [
    (1, '720P'),
    (2, '1080P'),
    (3, '4K')
]

# 热门精选
Hot = [
    (False,'否'),
    (True,'是')
]
# 置顶
Top = [
    (False,'否'),
    (True,'是')
]
# 是否限制
SHOW = [
    (False, '否'),
    (True, '是')
]
# 是否免费
FREE = [
    (False, '否'),
    (True, '是')
]



class Category(models.Model):
    # 分类信息
    id = models.AutoField(primary_key=True)
    category_name = models.CharField(max_length=100,verbose_name='分类名')

    class Meta:
        db_table = u'category'                                      # 数据库名字
        verbose_name = '分类管理'                                    # 
        verbose_name_plural = '分类管理'                             # 网页正常显示名字

    def __str__(self):
        return self.category_name


class Movie(models.Model):
    # 电影信息
    id = models.AutoField(primary_key=True)
    movie_name = models.CharField(max_length=100,verbose_name='电影名')
    release_year = models.IntegerField(verbose_name='上映年份')
    director = models.CharField(max_length=100,verbose_name='导演')
    scriptwriter = models.CharField(max_length=100,verbose_name='编剧')
    actors = models.CharField(max_length=200,verbose_name='主演')
    region = models.SmallIntegerField(choices=Region,verbose_name='地区')
    types = models.CharField(max_length=50,verbose_name='类型')
    language = models.CharField(max_length=100,verbose_name='语言')
    release_date = models.DateField(verbose_name='上映日期')
    duration = models.CharField(max_length=50,verbose_name='时长(或集数)')
    alternate_name = models.CharField(max_length=100,blank=True,verbose_name='又名')
    image_url = models.CharField(max_length=300,blank=True,verbose_name='图片链接')
    rate = models.FloatField(blank=True,verbose_name='豆瓣评分')
    review = models.TextField(max_length=500,blank=True,verbose_name='简介')
    is_hot = models.BooleanField(choices=Hot,default=False,verbose_name='是否热门')
    is_top = models.BooleanField(choices=Top,default=False,verbose_name='是否置顶')
    quality = models.SmallIntegerField(choices=Quality,blank=False,verbose_name='清晰度')
    subtitle = models.CharField(max_length=100,blank=True,verbose_name='字幕')
    update_info = models.CharField(max_length=100,blank=True,verbose_name='更新信息')
    update_progress = models.CharField(max_length=100,blank=True,verbose_name='更新进度')
    download_info = models.TextField(max_length=500,blank=True,verbose_name='网盘信息',
                                     help_text="每个网盘信息占一行，每个字段用网盘名:网址 提取码:字符 组成（无提取码不写）。 如 百度网盘:http://www.baidu.com  提取码:8888 ")
    is_show = models.BooleanField(choices=SHOW,default=True,verbose_name='是否显示')
    is_free = models.BooleanField(choices=FREE,default=False,verbose_name='是否免费')
    # 设置外键关联
    category = models.ForeignKey(Category,blank=False,verbose_name='分类名', on_delete=models.CASCADE) 



    class Meta:
        db_table = 'movie'
        verbose_name = '电影管理'
        verbose_name_plural = '电影管理'

    def __str__(self):
        return self.movie_name





"""
class MyModel(models.Model):
    my_field = models.CharField(max_length=100)
    # non_db_attrs start
    blank = True  # 该字段可以为空
    choices = [('A', 'Option A'), ('B', 'Option B')]  # 选择列表，限制字段的值为选项A或选项B
    db_column = 'custom_column'  # 数据库表中的列名为custom_column
    editable = False  # 该字段不可在后台管理界面编辑
    error_messages = {'required': 'This field is required.'}  # 自定义错误消息
    help_text = 'Enter a value for this field.'  # 帮助文本
    limit_choices_to = {'is_active': True}  # 关联对象选择的限制条件
    on_delete = models.CASCADE  # 关系字段的删除行为为级联删除
    related_name = 'related_objects'  # 反向关系名称为related_objects
    related_query_name = 'related_object'  # 反向查询名称为related_object
    validators = [validate_my_field]  # 字段值的验证器
    verbose_name = 'My Field'  # 字段的可读性高的名称为"My Field"
    
    
class MyModel(models.Model):
    my_field = models.CharField(max_length=100)
    
    class Meta:
    
        db_table = 'movie'                  # 数据库名字
        verbose_name = '电影管理'               # 常用于后台管理的名字
        verbose_name_plural = '电影管理'        # 常用于后台管理的名字
    
    
        # 其他常用的元数据属性
        # 指定模型对象的默认排序顺序，按照 my_field 字段进行升序排序
        ordering = ['my_field']
        
        # 指定模型需要创建的数据库索引，为 my_field 字段创建一个索引
        indexes = [
            models.Index(fields=['my_field']),
        ]
        
        # 指定模型中需要唯一约束的字段组合，my_field 字段必须是唯一的
        unique_together = [('my_field',)]
        
        # 指定模型的权限，允许所有用户进行添加、修改和删除操作
        permissions = [
            ('add_mymodel', 'Can add MyModel'),
            ('change_mymodel', 'Can change MyModel'),
            ('delete_mymodel', 'Can delete MyModel'),
        ]
        
        # 指定模型的默认权限，允许所有用户进行添加、修改和删除操作
        default_permissions = ['add', 'change', 'delete']
        
        # 指示该模型是否为抽象模型，该模型只用作其他模型的基类
        abstract = True
        
        # 指示模型是否可以与其他模型进行交换
        swappable = 'myapp.MyModel'
        
        # 指定模型的数据库约束，为 my_field 字段添加一个 CHECK 约束
        constraints = [
            models.CheckConstraint(check=models.Q(my_field__isnull=False), name='non_null_my_field'),
        ]
"""